#ifndef LECTEURSYMBOLE_H_
#define LECTEURSYMBOLE_H_

#include <fstream>
#include <string>
using namespace std;

#include "LecteurCaractere.h"
#include "Symbole.h"


/*! \file LecteurSymbole.h
    \brief La spécification de la classe LecteurSymbole
    \author Cedric Vierne et Sergio Vasquez
    \date 18.04.2011
 */

/*! \class LecteurSymbole
    \brief La classe représentant la lecture des symbole
   
    Cette classe permet de parcourire un fichier texte et de lire les symbole.
 */

class LecteurSymbole {
public:
    /*! \fn LecteurSymbole(string nomFich)
        \brief Constructeur de la classe LecteurSymbole
       * Il construit le lecteur pour parcourir nomFich
       * résultat : symCour = premier symbole du fichier nomFich
       * \param nomFich - Nom du fichier
    */ 
	LecteurSymbole(string nomFich);
        
     /*! \fn suivant()
        \brief passe au symbole suivant du fichier, s'il existe
        \param Aucun
    */
	void suivant();
        
    /*! \fn inline Symbole getSymCour() { return symCour; }
        \brief C'est un accesseur qui retourne le symbole Courant.
        \return La valeur de symCour
    */
	inline Symbole getSymCour()      { return symCour; }
        
    /*! \fn inline unsigned int getLigne() { return ligne;   } 
        \brief C'est un accesseur qui retourne la ligne.
        \return La valeur de ligne
    */
	inline unsigned int getLigne()   { return ligne;   }
        
    /*! \fn inline unsigned int getColonne() { return colonne; } 
        \brief C'est un accesseur qui retourne la colone.
        \return La valeur de la colonne
    */
	inline unsigned int getColonne() { return colonne; }

private:
    
    /*! \fn LecteurCaractere lc
        \brief c'est le lecteur de caracteres
    */
	LecteurCaractere lc;
        
    /*! \fn Symbole symCour
        \brief c'est le symbole courant du lecteur de symboles
    */
	Symbole symCour;
	
    /*! \fn unsigned int ligne, colonne
        \brief Ce sont les coordonnees, dans le fichier, du symbole courant
    */
        unsigned int ligne, colonne;
	
    /*! \fn sauterSeparateurs()
        \brief  Permet de sauter dans lc une suite de separateurs consecutifs
    */
        void sauterSeparateurs();
        
    /*! \fn sauterCommentaires
        \brief Permet de sauter dans lc une suite de Commentaire consecutifs
    */
        void sauterCommentaires();
	
    /*! \fn motSuivant
        \brief lit dans lc la chaine du prochain symbole et la renvoie en resultat
    */
        string motSuivant();
};

#endif /* LECTEURSYMBOLE_H_ */ 
